Files
grungnet/src/components/token/TokenTiles.js
T

74 lines
2.0 KiB
JavaScript
Raw Normal View History

import React from "react";
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
import SortableTiles from "../tile/SortableTiles";
2021-06-15 20:08:45 +10:00
import SortableTilesDragOverlay from "../tile/SortableTilesDragOverlay";
2021-05-24 15:17:23 +10:00
import { getGroupItems } from "../../helpers/group";
2021-05-20 12:22:07 +10:00
import { useGroup } from "../../contexts/GroupContext";
2021-05-20 12:22:07 +10:00
2021-06-10 20:08:11 +10:00
function TokenTiles({ tokensById, onTokenEdit, subgroup }) {
const {
selectedGroupIds,
selectMode,
onGroupOpen,
onGroupSelect,
} = useGroup();
function renderTile(group) {
2021-05-14 18:02:50 +10:00
if (group.type === "item") {
2021-06-10 20:08:11 +10:00
const token = tokensById[group.id];
if (token) {
const isSelected = selectedGroupIds.includes(group.id);
const canEdit =
isSelected &&
selectMode === "single" &&
selectedGroupIds.length === 1;
return (
<TokenTile
key={token.id}
token={token}
isSelected={isSelected}
onSelect={onGroupSelect}
onTokenEdit={onTokenEdit}
canEdit={canEdit}
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);
const canOpen =
isSelected && selectMode === "single" && selectedGroupIds.length === 1;
2021-05-14 18:02:50 +10:00
return (
<TokenTileGroup
key={group.id}
group={group}
2021-06-10 20:08:11 +10:00
tokens={items.map((item) => tokensById[item.id])}
2021-05-20 12:22:07 +10:00
isSelected={isSelected}
onSelect={onGroupSelect}
onDoubleClick={() => canOpen && onGroupOpen(group.id)}
2021-05-14 18:02:50 +10:00
/>
);
}
}
2021-06-15 20:08:45 +10:00
return (
<>
<SortableTiles renderTile={renderTile} subgroup={subgroup} />
<SortableTilesDragOverlay renderTile={renderTile} subgroup={subgroup} />
</>
);
}
export default TokenTiles;