2020-05-20 12:37:29 +10:00
|
|
|
import React, { useContext } from "react";
|
2020-05-19 16:21:01 +10:00
|
|
|
import { Box, Flex } from "theme-ui";
|
2020-03-20 11:05:40 +11:00
|
|
|
import shortid from "shortid";
|
2020-04-07 18:18:08 +10:00
|
|
|
import SimpleBar from "simplebar-react";
|
2020-03-19 21:40:29 +11:00
|
|
|
|
2020-04-13 00:24:03 +10:00
|
|
|
import ListToken from "./ListToken";
|
2020-03-20 11:05:40 +11:00
|
|
|
import ProxyToken from "./ProxyToken";
|
|
|
|
|
|
2020-05-19 16:21:01 +10:00
|
|
|
import SelectTokensButton from "./SelectTokensButton";
|
|
|
|
|
|
2020-04-24 15:50:05 +10:00
|
|
|
import { fromEntries } from "../../helpers/shared";
|
2020-09-06 15:18:05 +10:00
|
|
|
import useSetting from "../../helpers/useSetting";
|
2020-04-24 15:50:05 +10:00
|
|
|
|
2020-04-30 11:25:33 +10:00
|
|
|
import AuthContext from "../../contexts/AuthContext";
|
2020-05-19 16:21:01 +10:00
|
|
|
import TokenDataContext from "../../contexts/TokenDataContext";
|
2020-04-30 11:25:33 +10:00
|
|
|
|
2020-03-20 13:33:12 +11:00
|
|
|
const listTokenClassName = "list-token";
|
2020-03-20 11:05:40 +11:00
|
|
|
|
2020-05-19 16:21:01 +10:00
|
|
|
function Tokens({ onMapTokenStateCreate }) {
|
2020-04-30 11:25:33 +10:00
|
|
|
const { userId } = useContext(AuthContext);
|
2020-09-11 16:56:40 +10:00
|
|
|
const { ownedTokens, tokens, updateToken } = useContext(TokenDataContext);
|
2020-09-06 15:18:05 +10:00
|
|
|
const [fullScreen] = useSetting("map.fullScreen");
|
2020-05-19 16:21:01 +10:00
|
|
|
|
2020-03-20 11:05:40 +11:00
|
|
|
function handleProxyDragEnd(isOnMap, token) {
|
2020-05-19 16:21:01 +10:00
|
|
|
if (isOnMap && onMapTokenStateCreate) {
|
2020-04-24 18:39:11 +10:00
|
|
|
// Create a token state from the dragged token
|
2020-05-19 16:21:01 +10:00
|
|
|
onMapTokenStateCreate({
|
2020-04-13 00:24:03 +10:00
|
|
|
id: shortid.generate(),
|
2020-04-24 18:39:11 +10:00
|
|
|
tokenId: token.id,
|
2020-04-30 11:25:33 +10:00
|
|
|
owner: userId,
|
2020-05-20 12:37:29 +10:00
|
|
|
size: token.defaultSize,
|
2020-04-13 00:24:03 +10:00
|
|
|
label: "",
|
2020-04-24 15:50:05 +10:00
|
|
|
statuses: [],
|
2020-04-24 18:39:11 +10:00
|
|
|
x: token.x,
|
|
|
|
|
y: token.y,
|
2020-08-27 17:30:17 +10:00
|
|
|
lastModifiedBy: userId,
|
|
|
|
|
lastModified: Date.now(),
|
2020-05-22 21:10:05 +10:00
|
|
|
rotation: 0,
|
2020-08-27 17:30:17 +10:00
|
|
|
locked: false,
|
|
|
|
|
visible: true,
|
2020-04-13 00:24:03 +10:00
|
|
|
});
|
2020-09-11 16:56:40 +10:00
|
|
|
// Update last used for cache invalidation
|
|
|
|
|
updateToken(token.id, { lastUsed: Date.now() });
|
2020-03-20 11:05:40 +11:00
|
|
|
}
|
|
|
|
|
}
|
2020-03-19 17:33:57 +11:00
|
|
|
|
2020-03-19 21:40:29 +11:00
|
|
|
return (
|
2020-03-20 11:05:40 +11:00
|
|
|
<>
|
2020-04-07 18:18:08 +10:00
|
|
|
<Box
|
|
|
|
|
sx={{
|
|
|
|
|
height: "100%",
|
|
|
|
|
width: "80px",
|
|
|
|
|
minWidth: "80px",
|
|
|
|
|
overflow: "hidden",
|
2020-09-06 15:18:05 +10:00
|
|
|
display: fullScreen ? "none" : "block",
|
2020-04-07 18:18:08 +10:00
|
|
|
}}
|
|
|
|
|
>
|
2020-05-19 16:21:01 +10:00
|
|
|
<SimpleBar style={{ height: "calc(100% - 48px)", overflowX: "hidden" }}>
|
2020-05-19 19:03:36 +10:00
|
|
|
{ownedTokens
|
2020-05-28 16:23:20 +10:00
|
|
|
.filter((token) => !token.hideInSidebar)
|
2020-05-19 19:03:36 +10:00
|
|
|
.map((token) => (
|
|
|
|
|
<ListToken
|
|
|
|
|
key={token.id}
|
|
|
|
|
token={token}
|
|
|
|
|
className={listTokenClassName}
|
|
|
|
|
/>
|
|
|
|
|
))}
|
2020-04-07 18:18:08 +10:00
|
|
|
</SimpleBar>
|
2020-05-19 16:21:01 +10:00
|
|
|
<Flex
|
|
|
|
|
bg="muted"
|
|
|
|
|
sx={{
|
|
|
|
|
justifyContent: "center",
|
|
|
|
|
height: "48px",
|
|
|
|
|
alignItems: "center",
|
|
|
|
|
}}
|
|
|
|
|
>
|
|
|
|
|
<SelectTokensButton />
|
|
|
|
|
</Flex>
|
2020-04-07 18:18:08 +10:00
|
|
|
</Box>
|
2020-03-20 11:05:40 +11:00
|
|
|
<ProxyToken
|
2020-03-20 13:33:12 +11:00
|
|
|
tokenClassName={listTokenClassName}
|
2020-03-20 11:05:40 +11:00
|
|
|
onProxyDragEnd={handleProxyDragEnd}
|
2020-04-24 15:50:05 +10:00
|
|
|
tokens={fromEntries(tokens.map((token) => [token.id, token]))}
|
2020-03-20 11:05:40 +11:00
|
|
|
/>
|
|
|
|
|
</>
|
2020-03-19 21:40:29 +11:00
|
|
|
);
|
2020-03-19 17:33:57 +11:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
export default Tokens;
|