From 88e128e3d596e27969ee26fff1d3a31fc02ec4b7 Mon Sep 17 00:00:00 2001 From: "yingkong.lz" Date: Sun, 24 Jan 2021 00:10:34 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20metadata=20=E5=A2=9E=E5=8A=A0=20canHove?= =?UTF-8?q?ring=20=E9=85=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/builtin-simulator/bem-tools/border-detecting.tsx | 8 ++++++++ packages/designer/src/designer/drag-ghost/index.tsx | 2 +- .../editor-preset-vision/src/bundle/upgrade-metadata.ts | 5 +++++ packages/types/src/metadata.ts | 1 + 4 files changed, 15 insertions(+), 1 deletion(-) diff --git a/packages/designer/src/builtin-simulator/bem-tools/border-detecting.tsx b/packages/designer/src/builtin-simulator/bem-tools/border-detecting.tsx index 1f1735801..abc1c9cc5 100644 --- a/packages/designer/src/builtin-simulator/bem-tools/border-detecting.tsx +++ b/packages/designer/src/builtin-simulator/bem-tools/border-detecting.tsx @@ -73,6 +73,14 @@ export class BorderDetecting extends Component<{ host: BuiltinSimulatorHost }> { render() { const { host } = this.props; const { current } = this; + + const canHoverHook = current?.componentMeta.getMetadata()?.experimental?.callbacks?.onHoverHook; + const canHover = (canHoverHook && typeof canHoverHook === 'function') ? canHoverHook(current) : true; + + if (!canHover) { + return null; + } + if (!current || host.viewport.scrolling || host.liveEditing.editing) { return null; } diff --git a/packages/designer/src/designer/drag-ghost/index.tsx b/packages/designer/src/designer/drag-ghost/index.tsx index 021dee612..195d3cacd 100644 --- a/packages/designer/src/designer/drag-ghost/index.tsx +++ b/packages/designer/src/designer/drag-ghost/index.tsx @@ -37,7 +37,7 @@ export default class DragGhost extends Component<{ designer: Designer }> { this.y = e.globalY; if (isSimulatorHost(e.sensor)) { const container = e.sensor.getDropContainer(e); - if (container.container.componentMeta.getMetadata().experimental?.isAbsoluteLayoutContainer) { + if (container?.container.componentMeta.getMetadata().experimental?.isAbsoluteLayoutContainer) { this.isAbsoluteLayoutContainer = true; return; } diff --git a/packages/editor-preset-vision/src/bundle/upgrade-metadata.ts b/packages/editor-preset-vision/src/bundle/upgrade-metadata.ts index 6b64156b2..013059b5a 100644 --- a/packages/editor-preset-vision/src/bundle/upgrade-metadata.ts +++ b/packages/editor-preset-vision/src/bundle/upgrade-metadata.ts @@ -145,6 +145,7 @@ export interface OldPrototypeConfig { // alias to canDragging canDraging?: boolean; // => onDrag canDragging?: boolean; // => ? + canHovering?: ((dragment: Node) => boolean) | boolean; canOperating?: boolean; // => disabledActions canUseCondition?: boolean; @@ -614,6 +615,7 @@ export function upgradeMetadata(oldConfig: OldPrototypeConfig) { // hooks canDraging, canDragging, // handleDragging + canHovering, // events didDropOut, // onNodeRemove didDropIn, // onNodeAdd @@ -760,6 +762,9 @@ export function upgradeMetadata(oldConfig: OldPrototypeConfig) { } callbacks.onMoveHook = () => v; } + if (canHovering != null) { + callbacks.onHoverHook = typeof canHovering === 'boolean' ? () => canHovering : canHovering; + } if (didDropIn) { callbacks.onNodeAdd = didDropIn; } diff --git a/packages/types/src/metadata.ts b/packages/types/src/metadata.ts index 36e99b731..bad0711d7 100644 --- a/packages/types/src/metadata.ts +++ b/packages/types/src/metadata.ts @@ -184,6 +184,7 @@ export interface Callbacks { onLocateHook?: (e: any, currentNode: any) => any; onAcceptHook?: (currentNode: any, locationData: any) => any; onMoveHook?: (currentNode: any) => boolean; // thinkof 限制性拖拽 + onHoverHook?: (currentNode: any) => boolean; onChildMoveHook?: (childNode: any, currentNode: any) => boolean; // events