From 275b7aaef928c3dea4f01965e3b5671500cd93a2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=8A=9B=E7=9A=93?= Date: Fri, 20 Nov 2020 11:37:12 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=20setDevice=20?= =?UTF-8?q?=E9=87=8C=E8=8E=B7=E5=8F=96=20currentDocument=20=E7=9A=84?= =?UTF-8?q?=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../designer/src/builtin-simulator/host.ts | 20 -------------- packages/editor-preset-vision/src/editor.ts | 1 + packages/editor-preset-vision/src/viewport.ts | 7 ++--- packages/react-renderer/src/index.tsx | 21 ++++++++------- .../react-simulator-renderer/src/renderer.ts | 2 +- packages/utils/package.json | 1 + packages/utils/src/misc.ts | 26 ++++++++++++++++++- 7 files changed, 44 insertions(+), 34 deletions(-) diff --git a/packages/designer/src/builtin-simulator/host.ts b/packages/designer/src/builtin-simulator/host.ts index 3010430b7..9b853422e 100644 --- a/packages/designer/src/builtin-simulator/host.ts +++ b/packages/designer/src/builtin-simulator/host.ts @@ -1308,26 +1308,6 @@ export class BuiltinSimulatorHost implements ISimulatorHost { - const timeGap = 200; - return new Promise((resolve) => { - setTimeout(() => { - if (this.project.currentDocument) { - resolve(); - } - }, timeGap); - }).catch(() => { - return this.waitForCurrentDocument(); - }); - } - - waitForCurrentDocument(): Promise { - if (this.project.currentDocument) { - return Promise.resolve(); - } - return this._innerWaitForCurrentDocument(); - } // #endregion } diff --git a/packages/editor-preset-vision/src/editor.ts b/packages/editor-preset-vision/src/editor.ts index 3ff2575b3..7b7ab6de1 100644 --- a/packages/editor-preset-vision/src/editor.ts +++ b/packages/editor-preset-vision/src/editor.ts @@ -36,6 +36,7 @@ editor.set('designer', designer); designer.project.onCurrentDocumentChange((doc) => { bus.emit(VE_EVENTS.VE_PAGE_PAGE_READY); + editor.set('currentDocuemnt', doc); }); // 升级 Props diff --git a/packages/editor-preset-vision/src/viewport.ts b/packages/editor-preset-vision/src/viewport.ts index da943bed1..22c7a2e24 100644 --- a/packages/editor-preset-vision/src/viewport.ts +++ b/packages/editor-preset-vision/src/viewport.ts @@ -1,6 +1,6 @@ import { EventEmitter } from 'events'; import Flags from './flags'; -import { designer } from './editor'; +import { editor } from './editor'; const domReady = require('domready'); @@ -192,10 +192,11 @@ export class Viewport { return this.preview; } - setDevice(device = 'pc') { + async setDevice(device = 'pc') { if (this.getDevice() !== device) { this.device = device; - designer.currentDocument?.simulator?.set('device', device === 'mobile' ? 'mobile' : 'default'); + const currentDocument = await editor.onceGot('currentDocuemnt'); + currentDocument?.simulator?.set('device', device === 'mobile' ? 'mobile' : 'default'); // Flags.setSimulator(device); // this.applyMediaCSS(); this.emitter.emit('devicechange', device); diff --git a/packages/react-renderer/src/index.tsx b/packages/react-renderer/src/index.tsx index a2b2a8b0e..d38896a29 100644 --- a/packages/react-renderer/src/index.tsx +++ b/packages/react-renderer/src/index.tsx @@ -2,6 +2,7 @@ import React, { Component, PureComponent, createElement as reactCreateElement } import ReactDOM from 'react-dom'; import PropTypes from 'prop-types'; import Debug from 'debug'; +import { ConfigProvider } from '@alifd/next'; import { isEmpty } from '@ali/b3-one/lib/obj'; import AppContext from './context/appContext'; import { isFileSchema, goldlog } from './utils'; @@ -196,15 +197,17 @@ export default class Renderer extends Component { engine: this, }} > - + + + ); } diff --git a/packages/react-simulator-renderer/src/renderer.ts b/packages/react-simulator-renderer/src/renderer.ts index 64ef4d454..9e0d1ab63 100644 --- a/packages/react-simulator-renderer/src/renderer.ts +++ b/packages/react-simulator-renderer/src/renderer.ts @@ -177,7 +177,7 @@ export class SimulatorRendererContainer implements BuiltinSimulatorRenderer { } constructor() { - this.dispose = host.connect(this, async () => { + this.dispose = host.connect(this, () => { // sync layout config this._layout = host.project.get('config').layout; diff --git a/packages/utils/package.json b/packages/utils/package.json index fb0660ce9..157793f4c 100644 --- a/packages/utils/package.json +++ b/packages/utils/package.json @@ -16,6 +16,7 @@ "dependencies": { "@ali/lowcode-types": "^0.13.1-15", "@alifd/next": "^1.19.16", + "lodash.get": "^4.4.2", "react": "^16" }, "devDependencies": { diff --git a/packages/utils/src/misc.ts b/packages/utils/src/misc.ts index bf2883ece..a0f8f13ff 100644 --- a/packages/utils/src/misc.ts +++ b/packages/utils/src/misc.ts @@ -1,5 +1,6 @@ import { isI18NObject } from './is-object'; +import get from 'lodash.get'; export function isUseI18NSetter(prototype: any, propName: string) { const configure = prototype?.options?.configure; @@ -18,4 +19,27 @@ export function convertToI18NObject(v: string | object, locale: string = 'zh_CN' export function isString(v: any): v is string { return typeof v === 'string'; -} \ No newline at end of file +} + +function _innerWaitForThing(obj: any, path: string): Promise { + const timeGap = 200; + return new Promise((resolve, reject) => { + setTimeout(() => { + const thing = get(obj, path); + if (thing) { + return resolve(thing); + } + reject(); + }, timeGap); + }).catch(() => { + return _innerWaitForThing(obj, path); + }); +} + +export function waitForThing(obj: any, path: string): Promise { + const thing = get(obj, path); + if (thing) { + return Promise.resolve(thing); + } + return _innerWaitForThing(obj, path); +}