From 62476ce43e8e1fa94bc028fc45c0d37e5f0d17c3 Mon Sep 17 00:00:00 2001 From: Mitchell McCaffrey Date: Wed, 20 May 2020 15:44:28 +1000 Subject: [PATCH] Added token size to token map menu --- src/components/token/TokenMenu.js | 59 ++++++++++++++++++++++++++----- 1 file changed, 50 insertions(+), 9 deletions(-) diff --git a/src/components/token/TokenMenu.js b/src/components/token/TokenMenu.js index d64063a..617d7fe 100644 --- a/src/components/token/TokenMenu.js +++ b/src/components/token/TokenMenu.js @@ -1,11 +1,13 @@ import React, { useEffect, useState, useRef } from "react"; import interact from "interactjs"; -import { Box, Input } from "theme-ui"; +import { Box, Input, Slider, Flex, Text } from "theme-ui"; import MapMenu from "../map/MapMenu"; import colors, { colorOptions } from "../../helpers/colors"; +const defaultTokenMaxSize = 6; + /** * @callback onTokenChange * @param {Object} token the token that was changed @@ -37,10 +39,11 @@ function TokenMenu({ tokenClassName, onTokenChange, tokens, disabledTokens }) { const [currentToken, setCurrentToken] = useState({}); const [menuLeft, setMenuLeft] = useState(0); const [menuTop, setMenuTop] = useState(0); + const [tokenMaxSize, setTokenMaxSize] = useState(defaultTokenMaxSize); function handleLabelChange(event) { // Slice to remove Label: text - const label = event.target.value.slice(7); + const label = event.target.value; if (label.length <= 1) { setCurrentToken((prevToken) => ({ ...prevToken, @@ -66,6 +69,15 @@ function TokenMenu({ tokenClassName, onTokenChange, tokens, disabledTokens }) { onTokenChange({ ...currentToken, statuses: newStatuses }); } + function handleSizeChange(event) { + const newSize = parseInt(event.target.value); + setCurrentToken((prevToken) => ({ + ...prevToken, + size: newSize, + })); + onTokenChange({ ...currentToken, size: newSize }); + } + useEffect(() => { function handleTokenMenuOpen(event) { const target = event.target; @@ -75,6 +87,8 @@ function TokenMenu({ tokenClassName, onTokenChange, tokens, disabledTokens }) { } const token = tokensRef.current[id] || {}; setCurrentToken(token); + // Set token max size to be higher if needed + setTokenMaxSize(Math.max(token.size, defaultTokenMaxSize)); const targetRect = target.getBoundingClientRect(); setMenuLeft(targetRect.left); @@ -113,7 +127,7 @@ function TokenMenu({ tokenClassName, onTokenChange, tokens, disabledTokens }) { // Focus input const tokenLabelInput = node.querySelector("#changeTokenLabel"); tokenLabelInput.focus(); - tokenLabelInput.setSelectionRange(7, 8); + tokenLabelInput.select(); // Ensure menu is in bounds const nodeRect = node.getBoundingClientRect(); @@ -139,18 +153,27 @@ function TokenMenu({ tokenClassName, onTokenChange, tokens, disabledTokens }) { left={`${menuLeft}px`} onModalContent={handleModalContent} > - - + { e.preventDefault(); handleRequestClose(); }} + sx={{ alignItems: "center" }} > + + Label: + - + ))} + + + Size: + + + );