fix: 考虑兼容原来只处理4向的场景

This commit is contained in:
力皓 2021-01-25 14:15:12 +08:00
parent 95a8356803
commit e3fc9b4cea

View File

@ -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));
};
}