Files
grungnet/src/components/map/MapTiles.js

60 lines
1.7 KiB
JavaScript
Raw Normal View History

import React from "react";
import MapTile from "./MapTile";
2021-05-14 18:02:50 +10:00
import MapTileGroup from "./MapTileGroup";
import SortableTiles from "../tile/SortableTiles";
2021-05-20 12:22:07 +10:00
2021-05-24 15:17:23 +10:00
import { getGroupItems } from "../../helpers/group";
import { useGroup } from "../../contexts/GroupContext";
2021-05-20 12:22:07 +10:00
function MapTiles({ maps, onMapEdit, onMapSelect, subgroup }) {
const {
selectedGroupIds,
selectMode,
onGroupOpen,
onGroupSelect,
} = useGroup();
function renderTile(group) {
2021-05-14 18:02:50 +10:00
if (group.type === "item") {
const map = maps.find((map) => map.id === group.id);
2021-05-20 12:22:07 +10:00
const isSelected = selectedGroupIds.includes(group.id);
const canEdit =
isSelected && selectMode === "single" && selectedGroupIds.length === 1;
2021-05-14 18:02:50 +10:00
return (
<MapTile
key={map.id}
map={map}
isSelected={isSelected}
onSelect={onGroupSelect}
2021-05-20 12:22:07 +10:00
onEdit={onMapEdit}
onDoubleClick={() => canEdit && onMapSelect(group.id)}
canEdit={canEdit}
2021-05-14 18:02:50 +10:00
badges={[`${map.grid.size.x}x${map.grid.size.y}`]}
/>
);
} else {
2021-05-20 12:22:07 +10:00
const isSelected = selectedGroupIds.includes(group.id);
const items = getGroupItems(group);
const canOpen =
isSelected && selectMode === "single" && selectedGroupIds.length === 1;
2021-05-14 18:02:50 +10:00
return (
<MapTileGroup
key={group.id}
group={group}
maps={items.map((item) => maps.find((map) => map.id === 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
/>
);
}
2020-10-01 15:05:30 +10:00
}
return <SortableTiles renderTile={renderTile} subgroup={subgroup} />;
}
export default MapTiles;