2021-05-24 13:34:21 +10:00
|
|
|
import React from "react";
|
2020-05-19 16:21:01 +10:00
|
|
|
|
|
|
|
|
import TokenTile from "./TokenTile";
|
2021-05-14 18:02:50 +10:00
|
|
|
import TokenTileGroup from "./TokenTileGroup";
|
2021-06-05 13:34:17 +10:00
|
|
|
import TokenHiddenBadge from "./TokenHiddenBadge";
|
2021-05-20 12:22:07 +10:00
|
|
|
|
2021-05-24 13:34:21 +10:00
|
|
|
import SortableTiles from "../tile/SortableTiles";
|
2020-09-06 13:20:05 +10:00
|
|
|
|
2021-05-24 15:17:23 +10:00
|
|
|
import { getGroupItems } from "../../helpers/group";
|
2021-05-20 12:22:07 +10:00
|
|
|
|
2021-05-24 13:34:21 +10:00
|
|
|
import { useGroup } from "../../contexts/GroupContext";
|
2021-05-20 12:22:07 +10:00
|
|
|
|
2021-05-27 17:19:36 +10:00
|
|
|
function TokenTiles({ tokens, onTokenEdit, subgroup }) {
|
2021-05-24 13:34:21 +10:00
|
|
|
const {
|
|
|
|
|
selectedGroupIds,
|
|
|
|
|
selectMode,
|
|
|
|
|
onGroupOpen,
|
|
|
|
|
onGroupSelect,
|
|
|
|
|
} = useGroup();
|
2020-10-01 22:32:21 +10:00
|
|
|
|
2021-05-21 15:12:25 +10:00
|
|
|
function renderTile(group) {
|
2021-05-14 18:02:50 +10:00
|
|
|
if (group.type === "item") {
|
|
|
|
|
const token = tokens.find((token) => token.id === group.id);
|
2021-05-20 12:22:07 +10:00
|
|
|
const isSelected = selectedGroupIds.includes(group.id);
|
2021-05-24 13:34:21 +10:00
|
|
|
const canEdit =
|
2021-06-06 10:24:56 +10:00
|
|
|
isSelected && selectMode === "single" && selectedGroupIds.length === 1;
|
2021-05-24 13:34:21 +10:00
|
|
|
|
2021-05-14 18:02:50 +10:00
|
|
|
return (
|
|
|
|
|
<TokenTile
|
|
|
|
|
key={token.id}
|
|
|
|
|
token={token}
|
|
|
|
|
isSelected={isSelected}
|
2021-05-24 13:34:21 +10:00
|
|
|
onSelect={onGroupSelect}
|
2021-05-14 18:02:50 +10:00
|
|
|
onTokenEdit={onTokenEdit}
|
2021-05-24 13:34:21 +10:00
|
|
|
canEdit={canEdit}
|
2021-06-05 13:34:17 +10:00
|
|
|
badges={[
|
|
|
|
|
`${token.defaultSize}x`,
|
|
|
|
|
<TokenHiddenBadge hidden={token.hideInSidebar} />,
|
|
|
|
|
]}
|
2021-05-14 18:02:50 +10:00
|
|
|
/>
|
|
|
|
|
);
|
|
|
|
|
} else {
|
2021-05-20 12:22:07 +10:00
|
|
|
const isSelected = selectedGroupIds.includes(group.id);
|
2021-05-21 16:14:11 +10:00
|
|
|
const items = getGroupItems(group);
|
2021-05-24 13:34:21 +10:00
|
|
|
const canOpen =
|
|
|
|
|
isSelected && selectMode === "single" && selectedGroupIds.length === 1;
|
2021-05-14 18:02:50 +10:00
|
|
|
return (
|
|
|
|
|
<TokenTileGroup
|
|
|
|
|
key={group.id}
|
|
|
|
|
group={group}
|
2021-05-21 16:14:11 +10:00
|
|
|
tokens={items.map((item) =>
|
2021-05-14 18:02:50 +10:00
|
|
|
tokens.find((token) => token.id === item.id)
|
|
|
|
|
)}
|
2021-05-20 12:22:07 +10:00
|
|
|
isSelected={isSelected}
|
2021-05-24 13:34:21 +10:00
|
|
|
onSelect={onGroupSelect}
|
|
|
|
|
onDoubleClick={() => canOpen && onGroupOpen(group.id)}
|
2021-05-14 18:02:50 +10:00
|
|
|
/>
|
|
|
|
|
);
|
|
|
|
|
}
|
2020-10-01 22:32:21 +10:00
|
|
|
}
|
|
|
|
|
|
2021-05-28 13:13:21 +10:00
|
|
|
return <SortableTiles renderTile={renderTile} subgroup={subgroup} />;
|
2020-05-19 16:21:01 +10:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
export default TokenTiles;
|