diff --git a/packages/editor-preset-vision/src/bundle/upgrade-metadata.ts b/packages/editor-preset-vision/src/bundle/upgrade-metadata.ts index 3333bbbec..eb48fd846 100644 --- a/packages/editor-preset-vision/src/bundle/upgrade-metadata.ts +++ b/packages/editor-preset-vision/src/bundle/upgrade-metadata.ts @@ -98,6 +98,20 @@ export interface OldPropConfig { liveTextEditing?: any; } +type ResizeHandler = (dragment: any, triggerDirection: string) => boolean; +type ResizeCompositeHandler = { handle: ResizeHandler, availableDirects: string[] | undefined }; +type CanResize = + | boolean + | ResizeHandler + | ResizeCompositeHandler; + +function isResizeCompositeHandler(resize: CanResize): resize is ResizeCompositeHandler { + if ((resize as any).handle) { + return true; + } + return false; +} + // from vision 5.4 export interface OldPrototypeConfig { packageName: string; // => npm.package @@ -169,7 +183,7 @@ export interface OldPrototypeConfig { subtreeModified?(this: Node): any; // => ? hooks // => ? - canResizing?: ((dragment: any, triggerDirection: string) => boolean) | boolean; + canResizing?: CanResize; onResizeStart?: (e: MouseEvent, triggerDirection: string, dragment: Node) => void; onResize?: (e: MouseEvent, triggerDirection: string, dragment: Node, moveX: number, moveY: number) => void; onResizeEnd?: (e: MouseEvent, triggerDirection: string, dragment: Node) => void; @@ -623,7 +637,6 @@ export function upgradeMetadata(oldConfig: OldPrototypeConfig) { didDropIn, // onNodeAdd subtreeModified, // onSubtreeModified - canResizing, // resizing onResizeStart, // onResizeStart onResize, // onResize onResizeEnd, // onResizeEnd @@ -631,6 +644,9 @@ export function upgradeMetadata(oldConfig: OldPrototypeConfig) { schema, isTopFixed, } = oldConfig; + let { + canResizing, // resizing + } = oldConfig; const meta: any = { componentName, @@ -746,13 +762,16 @@ export function upgradeMetadata(oldConfig: OldPrototypeConfig) { experimental.transducers = transducers; } if (canResizing) { - // TODO: enhance + let availableDirects = ['n', 'e', 's', 'w']; + if (isResizeCompositeHandler(canResizing)) { + availableDirects = canResizing.availableDirects || availableDirects; + canResizing = canResizing.handle; + } experimental.getResizingHandlers = (currentNode: any) => { - const directs = ['n', 'e', 's', 'w', 'ne', 'nw', 'se', 'sw']; if (canResizing === true) { - return directs; + return availableDirects; } - return directs.filter((d) => canResizing(currentNode, d)); + return availableDirects.filter((d) => (canResizing as any)(currentNode, d)); }; }