Split tokens into data and state to avoid data duplication

This commit is contained in:
Mitchell McCaffrey
2020-04-24 18:39:11 +10:00
parent 65478d555b
commit ece974c5d9
4 changed files with 59 additions and 43 deletions
+8 -17
View File
@@ -1,10 +1,8 @@
import React, { useState, useEffect } from "react";
import React, { useState } from "react";
import { Box } from "theme-ui";
import shortid from "shortid";
import SimpleBar from "simplebar-react";
import { tokens as defaultTokens } from "../../tokens";
import ListToken from "./ListToken";
import ProxyToken from "./ProxyToken";
import NumberInput from "../NumberInput";
@@ -13,27 +11,20 @@ import { fromEntries } from "../../helpers/shared";
const listTokenClassName = "list-token";
function Tokens({ onCreateMapToken }) {
const [tokens, setTokens] = useState([]);
useEffect(() => {
const defaultTokensWithIds = [];
for (let defaultToken of defaultTokens) {
defaultTokensWithIds.push({ ...defaultToken, id: defaultToken.name });
}
setTokens(defaultTokensWithIds);
}, []);
function Tokens({ onCreateMapTokenState, tokens }) {
const [tokenSize, setTokenSize] = useState(1);
function handleProxyDragEnd(isOnMap, token) {
if (isOnMap && onCreateMapToken) {
// Give the token an id
onCreateMapToken({
...token,
if (isOnMap && onCreateMapTokenState) {
// Create a token state from the dragged token
onCreateMapTokenState({
id: shortid.generate(),
tokenId: token.id,
size: tokenSize,
label: "",
statuses: [],
x: token.x,
y: token.y,
});
}
}