Close token menu when transforming

This commit is contained in:
Mitchell McCaffrey
2021-08-03 08:18:12 +10:00
parent 98d9b526c8
commit cef4844ea9
4 changed files with 36 additions and 20 deletions

View File

@@ -28,6 +28,7 @@ import { TokenState } from "../../types/TokenState";
import { Map } from "../../types/Map";
import {
TokenDragEventHandler,
TokenMenuCloseChangeEventHandler,
TokenMenuOpenChangeEventHandler,
TokenStateChangeEventHandler,
} from "../../types/Events";
@@ -37,6 +38,7 @@ type MapTokenProps = {
tokenState: TokenState;
onTokenStateChange: TokenStateChangeEventHandler;
onTokenMenuOpen: TokenMenuOpenChangeEventHandler;
onTokenMenuClose: TokenMenuCloseChangeEventHandler;
onTokenDragStart: TokenDragEventHandler;
onTokenDragEnd: TokenDragEventHandler;
draggable: boolean;
@@ -49,6 +51,7 @@ function Token({
tokenState,
onTokenStateChange,
onTokenMenuOpen,
onTokenMenuClose,
onTokenDragStart,
onTokenDragEnd,
draggable,
@@ -197,6 +200,13 @@ function Token({
}
const tokenRef = useRef<Konva.Group>(null);
const [isTransforming, setIsTransforming] = useState(false);
function handleTransformStart() {
setIsTransforming(true);
onTokenMenuClose();
}
function handleTransformEnd(event: Konva.KonvaEventObject<Event>) {
if (tokenRef.current) {
const sizeChange = event.target.scaleX();
@@ -209,7 +219,9 @@ function Token({
});
tokenRef.current.scaleX(1);
tokenRef.current.scaleY(1);
onTokenMenuOpen(tokenState.id, event.target);
}
setIsTransforming(false);
}
const minCellSize = Math.min(
@@ -288,7 +300,9 @@ function Token({
image={tokenImage}
hitFunc={() => {}}
/>
<Group>
</Group>
{!isTransforming ? (
<Group offsetX={tokenWidth / 2} offsetY={tokenHeight / 2}>
{tokenState.statuses?.length > 0 ? (
<TokenStatus
tokenState={tokenState}
@@ -296,22 +310,21 @@ function Token({
height={tokenHeight}
/>
) : null}
{tokenState.label ? (
<TokenLabel
tokenState={tokenState}
width={tokenWidth}
height={tokenHeight}
/>
) : null}
</Group>
</Group>
<Group offsetX={tokenWidth / 2} offsetY={tokenHeight / 2}>
{tokenState.label ? (
<TokenLabel
tokenState={tokenState}
width={tokenWidth}
height={tokenHeight}
/>
) : null}
</Group>
) : null}
</animated.Group>
<Transformer
active={selected}
active={selected || isTransforming}
nodeRef={tokenRef}
onTransformEnd={handleTransformEnd}
onTransformStart={handleTransformStart}
/>
</>
);

View File

@@ -63,23 +63,19 @@ function Transformer({
transformerRef.current.getLayer()?.batchDraw();
}
}, [active, nodeRef, anchorScale]);
}, [active, nodeRef, anchorScale, anchorRotate]);
const movingAnchorRef = useRef<string>();
function handleTransformStart(e: Konva.KonvaEventObject<Event>) {
if (transformerRef.current) {
movingAnchorRef.current = transformerRef.current._movingAnchorName;
if (active) {
setPreventMapInteraction(true);
}
setPreventMapInteraction(true);
onTransformStart && onTransformStart(e);
}
}
function handleTransformEnd(e: Konva.KonvaEventObject<Event>) {
if (active) {
setPreventMapInteraction(false);
}
setPreventMapInteraction(false);
onTransformEnd && onTransformEnd(e);
}