From 8ae23d014f878d677821a1fa481364109a973d29 Mon Sep 17 00:00:00 2001 From: kangwei Date: Wed, 23 Dec 2020 23:00:38 +0800 Subject: [PATCH] feat: enhance focusSelector logic --- packages/designer/src/designer/designer.ts | 1 - .../designer/src/document/document-model.ts | 6 +-- packages/editor-core/src/editor.ts | 37 ++++++------------- 3 files changed, 15 insertions(+), 29 deletions(-) diff --git a/packages/designer/src/designer/designer.ts b/packages/designer/src/designer/designer.ts index 50d3a4697..2e88bccda 100644 --- a/packages/designer/src/designer/designer.ts +++ b/packages/designer/src/designer/designer.ts @@ -36,7 +36,6 @@ export interface DesignerProps { suspensed?: boolean; componentMetadatas?: ComponentMetadata[]; globalComponentActions?: ComponentAction[]; - focusNodeSelector?: (rootNode: Node) => Node; onMount?: (designer: Designer) => void; onDragstart?: (e: LocateEvent) => void; onDrag?: (e: LocateEvent) => void; diff --git a/packages/designer/src/document/document-model.ts b/packages/designer/src/document/document-model.ts index bbcff7266..ad2c43c2e 100644 --- a/packages/designer/src/document/document-model.ts +++ b/packages/designer/src/document/document-model.ts @@ -98,9 +98,9 @@ export class DocumentModel { if (this._drillDownNode) { return this._drillDownNode; } - const selector = this.designer.get('focusNodeSelector'); - if (typeof selector === 'function') { - return selector(this.rootNode); + const selector = this.designer.editor.get<((rootNode: RootNode) => Node) | null>('focusNodeSelector'); + if (selector && typeof selector === 'function') { + return selector(this.rootNode!); } return this.rootNode; } diff --git a/packages/editor-core/src/editor.ts b/packages/editor-core/src/editor.ts index 117b5c14d..9087ec7e2 100644 --- a/packages/editor-core/src/editor.ts +++ b/packages/editor-core/src/editor.ts @@ -4,26 +4,21 @@ import { EditorConfig, PluginClassSet, KeyType, - GetOptions, GetReturnType, - HookConfig, + HookConfig } from '@ali/lowcode-types'; -import { IocContext, RegisterOptions } from './di'; import { globalLocale } from './intl'; import * as utils from './utils'; +import { obx } from './utils'; // import { tipHandler } from './widgets/tip/tip-handler'; EventEmitter.defaultMaxListeners = 100; -const NOT_FOUND = Symbol.for('not_found'); - export class Editor extends EventEmitter implements IEditor { /** * Ioc Container */ - private context = new IocContext({ - notFoundHandler: (/* type: KeyType */) => NOT_FOUND, - }); + @obx.val private context = new Map(); get locale() { return globalLocale.getLocale(); @@ -33,12 +28,8 @@ export class Editor extends EventEmitter implements IEditor { private hooks: HookConfig[] = []; - get(keyOrType: KeyOrType, opt?: GetOptions): GetReturnType | undefined { - const x = this.context.get(keyOrType, opt); - if (x === NOT_FOUND) { - return undefined; - } - return x; + get(keyOrType: KeyOrType): GetReturnType | undefined { + return this.context.get(keyOrType as any); } has(keyOrType: KeyType): boolean { @@ -46,17 +37,13 @@ export class Editor extends EventEmitter implements IEditor { } set(key: KeyType, data: any): void { - if (this.context.has(key)) { - this.context.replace(key, data, undefined, true); - } else { - this.context.register(data, key); - } + this.context.set(key, data); this.notifyGot(key); } onceGot(keyOrType: KeyOrType): Promise> { - const x = this.context.get(keyOrType); - if (x !== NOT_FOUND) { + const x = this.context.get(keyOrType); + if (x !== undefined) { return Promise.resolve(x); } return new Promise((resolve) => { @@ -68,8 +55,8 @@ export class Editor extends EventEmitter implements IEditor { keyOrType: KeyOrType, fn: (data: GetReturnType) => void, ): () => void { - const x = this.context.get(keyOrType); - if (x !== NOT_FOUND) { + const x = this.context.get(keyOrType); + if (x !== undefined) { fn(x); return () => {}; } else { @@ -80,8 +67,8 @@ export class Editor extends EventEmitter implements IEditor { } } - register(data: any, key?: KeyType, options?: RegisterOptions): void { - this.context.register(data, key, options); + register(data: any, key?: KeyType): void { + this.context.set(key || data, data); this.notifyGot(key || data); }