From 118878d9e101b4e583e3e1a4601a8aeb6dc9fd55 Mon Sep 17 00:00:00 2001 From: Mitchell McCaffrey Date: Thu, 21 May 2020 22:57:44 +1000 Subject: [PATCH] Readded map token remove --- src/components/map/Map.js | 14 +++++++++ src/components/map/MapToken.js | 15 ++++++++- src/components/token/TokenDragOverlay.js | 40 ++++++++++++++++++++++++ 3 files changed, 68 insertions(+), 1 deletion(-) create mode 100644 src/components/token/TokenDragOverlay.js diff --git a/src/components/map/Map.js b/src/components/map/Map.js index c9182dc..7d0586f 100644 --- a/src/components/map/Map.js +++ b/src/components/map/Map.js @@ -7,6 +7,7 @@ import MapToken from "./MapToken"; import TokenDataContext from "../../contexts/TokenDataContext"; import TokenMenu from "../token/TokenMenu"; +import TokenDragOverlay from "../token/TokenDragOverlay"; function Map({ map, @@ -141,6 +142,7 @@ function Map({ const [isTokenMenuOpen, setIsTokenMenuOpen] = useState(false); const [tokenMenuOptions, setTokenMenuOptions] = useState({}); + const [draggingTokenState, setDraggingTokenState] = useState(); function handleTokenMenuOpen(tokenStateId, tokenImage) { setTokenMenuOptions({ tokenStateId, tokenImage }); setIsTokenMenuOpen(true); @@ -156,6 +158,8 @@ function Map({ tokenSizePercent={tokenSizePercent} onTokenStateChange={onMapTokenStateChange} onTokenMenuOpen={handleTokenMenuOpen} + onTokenDragStart={() => setDraggingTokenState(tokenState)} + onTokenDragEnd={() => setDraggingTokenState(null)} /> )); @@ -169,6 +173,15 @@ function Map({ /> ); + const tokenDragOverlay = draggingTokenState && ( + { + onMapTokenStateRemove(draggingTokenState); + setDraggingTokenState(null); + }} + /> + ); + return ( {mapControls} {tokenMenu} + {tokenDragOverlay} } > diff --git a/src/components/map/MapToken.js b/src/components/map/MapToken.js index 01a4c90..24d4203 100644 --- a/src/components/map/MapToken.js +++ b/src/components/map/MapToken.js @@ -19,6 +19,8 @@ function MapToken({ tokenSizePercent, onTokenStateChange, onTokenMenuOpen, + onTokenDragStart, + onTokenDragEnd, }) { const { userId } = useContext(AuthContext); const { @@ -46,6 +48,7 @@ function MapToken({ y: event.target.y() / mapHeight, lastEditedBy: userId, }); + onTokenDragEnd(); } function handleClick(event) { @@ -61,7 +64,12 @@ function MapToken({ const imageRef = useRef(); useEffect(() => { const image = imageRef.current; - if (image && tokenSourceStatus === "loaded") { + if ( + image && + tokenSourceStatus === "loaded" && + tokenWidth > 0 && + tokenHeight > 0 + ) { image.cache({ pixelRatio: debouncedStageScale, }); @@ -71,6 +79,10 @@ function MapToken({ } }, [debouncedStageScale, tokenWidth, tokenHeight, tokenSourceStatus]); + if (!tokenWidth || !tokenHeight) { + return null; + } + return ( setPreventMapInteraction(false)} onClick={handleClick} onDragEnd={handleDragEnd} + onDragStart={onTokenDragStart} > + + + + + ); +} + +export default TokenDragOverlay;