From cef4844ea9dc3aa20834c6d7e93d2d8a281cf7b8 Mon Sep 17 00:00:00 2001 From: Mitchell McCaffrey Date: Tue, 3 Aug 2021 08:18:12 +1000 Subject: [PATCH] Close token menu when transforming --- src/components/konva/Token.tsx | 37 +++++++++++++++++++--------- src/components/konva/Transformer.tsx | 10 +++----- src/hooks/useMapTokens.tsx | 8 +++++- src/types/Events.ts | 1 + 4 files changed, 36 insertions(+), 20 deletions(-) diff --git a/src/components/konva/Token.tsx b/src/components/konva/Token.tsx index 5246795..75a510a 100644 --- a/src/components/konva/Token.tsx +++ b/src/components/konva/Token.tsx @@ -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(null); + + const [isTransforming, setIsTransforming] = useState(false); + function handleTransformStart() { + setIsTransforming(true); + onTokenMenuClose(); + } + function handleTransformEnd(event: Konva.KonvaEventObject) { 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={() => {}} /> - + + {!isTransforming ? ( + {tokenState.statuses?.length > 0 ? ( ) : null} + {tokenState.label ? ( + + ) : null} - - - {tokenState.label ? ( - - ) : null} - + ) : null} ); diff --git a/src/components/konva/Transformer.tsx b/src/components/konva/Transformer.tsx index 7350f1d..e29911b 100644 --- a/src/components/konva/Transformer.tsx +++ b/src/components/konva/Transformer.tsx @@ -63,23 +63,19 @@ function Transformer({ transformerRef.current.getLayer()?.batchDraw(); } - }, [active, nodeRef, anchorScale]); + }, [active, nodeRef, anchorScale, anchorRotate]); const movingAnchorRef = useRef(); function handleTransformStart(e: Konva.KonvaEventObject) { if (transformerRef.current) { movingAnchorRef.current = transformerRef.current._movingAnchorName; - if (active) { - setPreventMapInteraction(true); - } + setPreventMapInteraction(true); onTransformStart && onTransformStart(e); } } function handleTransformEnd(e: Konva.KonvaEventObject) { - if (active) { - setPreventMapInteraction(false); - } + setPreventMapInteraction(false); onTransformEnd && onTransformEnd(e); } diff --git a/src/hooks/useMapTokens.tsx b/src/hooks/useMapTokens.tsx index 666e446..7968e76 100644 --- a/src/hooks/useMapTokens.tsx +++ b/src/hooks/useMapTokens.tsx @@ -54,6 +54,10 @@ function useMapTokens( setIsTokenMenuOpen(true); } + function handleTokenMenuClose() { + setIsTokenMenuOpen(false); + } + function handleTokenDragStart( _: KonvaEventObject, tokenStateId: string @@ -87,6 +91,7 @@ function useMapTokens( tokenState={tokenState} onTokenStateChange={onTokenStateChange} onTokenMenuOpen={handleTokenMenuOpen} + onTokenMenuClose={handleTokenMenuClose} onTokenDragStart={handleTokenDragStart} onTokenDragEnd={handleTokenDragEnd} draggable={ @@ -98,6 +103,7 @@ function useMapTokens( map={map} selected={ !!tokenMenuOptions && + isTokenMenuOpen && tokenMenuOptions.tokenStateId === tokenState.id } /> @@ -108,7 +114,7 @@ function useMapTokens( const tokenMenu = ( setIsTokenMenuOpen(false)} + onRequestClose={handleTokenMenuClose} onTokenStateChange={onTokenStateChange} tokenState={ tokenMenuOptions && mapState?.tokens[tokenMenuOptions.tokenStateId] diff --git a/src/types/Events.ts b/src/types/Events.ts index ebc598d..f5c8f06 100644 --- a/src/types/Events.ts +++ b/src/types/Events.ts @@ -30,6 +30,7 @@ export type TokenMenuOpenChangeEventHandler = ( tokenStateId: string, tokenImage: Konva.Node ) => void; +export type TokenMenuCloseChangeEventHandler = () => void; export type TokenSettingsChangeEventHandler = (change: Partial) => void; export type TokenDragEventHandler = ( event: Konva.KonvaEventObject,