|
@@ -47,7 +47,21 @@ const { shape, tData, data } = useComponentStatus<Rect, GroupData>({
|
|
|
transformType: "custom",
|
|
|
customTransform(callback, shape, data) {
|
|
|
let prevMat: Transform;
|
|
|
- let transformResolve: () => void;
|
|
|
+ let unUpdate = false;
|
|
|
+ let transformResolve: (() => void) | null = null;
|
|
|
+
|
|
|
+ const updateChildren = debounce((data, mat) => {
|
|
|
+ unUpdate = false;
|
|
|
+ setShapeTransform(shape.value!.getNode(), mat);
|
|
|
+ matResponse({ data, mat, store }, prevMat);
|
|
|
+ prevMat = mat;
|
|
|
+ getGroupShapes!().forEach((shape) => nextTick(() => shape.fire("bound-change")));
|
|
|
+ if (autoUpdate.value) {
|
|
|
+ transformResolve && transformResolve();
|
|
|
+ transformResolve = null;
|
|
|
+ }
|
|
|
+ return true;
|
|
|
+ }, 6);
|
|
|
useCustomTransformer(shape, data, {
|
|
|
openSnap: false,
|
|
|
getRepShape($shape) {
|
|
@@ -73,29 +87,28 @@ const { shape, tData, data } = useComponentStatus<Rect, GroupData>({
|
|
|
},
|
|
|
};
|
|
|
},
|
|
|
- handler: debounce((data, mat) => {
|
|
|
- if (autoUpdate.value) return;
|
|
|
- setShapeTransform(shape.value!.getNode(), mat);
|
|
|
- matResponse({ data, mat, store }, prevMat);
|
|
|
- prevMat = mat;
|
|
|
- getGroupShapes!().forEach((shape) => nextTick(() => shape.fire("bound-change")));
|
|
|
- return true;
|
|
|
- }, 6),
|
|
|
- start() {
|
|
|
+ handler: (data, mat) => {
|
|
|
+ unUpdate = true;
|
|
|
+ updateChildren(data, mat);
|
|
|
+ },
|
|
|
+ async start() {
|
|
|
+ transformResolve && transformResolve();
|
|
|
+ await nextTick();
|
|
|
autoUpdate.value = false;
|
|
|
history.onceTrack(
|
|
|
() =>
|
|
|
new Promise<void>((resolve) => {
|
|
|
- console.log("onceTrack");
|
|
|
transformResolve = resolve;
|
|
|
})
|
|
|
);
|
|
|
},
|
|
|
callback() {
|
|
|
autoUpdate.value = true;
|
|
|
- transformResolve();
|
|
|
+ if (!unUpdate) {
|
|
|
+ transformResolve && transformResolve();
|
|
|
+ transformResolve = null;
|
|
|
+ }
|
|
|
callback();
|
|
|
- console.log("callback");
|
|
|
},
|
|
|
});
|
|
|
},
|