2021-05-24 13:34:21 +10:00
|
|
|
import React from "react";
|
2020-04-23 11:54:29 +10:00
|
|
|
|
2020-04-23 20:32:33 +10:00
|
|
|
import MapTile from "./MapTile";
|
2021-05-14 18:02:50 +10:00
|
|
|
import MapTileGroup from "./MapTileGroup";
|
2021-01-03 14:53:06 +11:00
|
|
|
|
2021-05-24 13:34:21 +10:00
|
|
|
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";
|
2020-09-06 13:20:05 +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-28 13:13:21 +10:00
|
|
|
function MapTiles({ maps, onMapEdit, onMapSelect, subgroup }) {
|
2021-05-24 13:34:21 +10:00
|
|
|
const {
|
|
|
|
|
selectedGroupIds,
|
|
|
|
|
selectMode,
|
|
|
|
|
onGroupOpen,
|
|
|
|
|
onGroupSelect,
|
|
|
|
|
} = useGroup();
|
2020-09-24 16:54:33 +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 map = maps.find((map) => map.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 =
|
|
|
|
|
isSelected && selectMode === "single" && selectedGroupIds.length === 1;
|
2021-05-14 18:02:50 +10:00
|
|
|
return (
|
|
|
|
|
<MapTile
|
|
|
|
|
key={map.id}
|
|
|
|
|
map={map}
|
|
|
|
|
isSelected={isSelected}
|
2021-05-24 13:34:21 +10:00
|
|
|
onSelect={onGroupSelect}
|
2021-05-20 12:22:07 +10:00
|
|
|
onEdit={onMapEdit}
|
2021-05-24 13:34:21 +10:00
|
|
|
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);
|
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 (
|
|
|
|
|
<MapTileGroup
|
|
|
|
|
key={group.id}
|
|
|
|
|
group={group}
|
2021-05-21 16:14:11 +10:00
|
|
|
maps={items.map((item) => maps.find((map) => map.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 15:05:30 +10:00
|
|
|
}
|
|
|
|
|
|
2021-05-28 13:13:21 +10:00
|
|
|
return <SortableTiles renderTile={renderTile} subgroup={subgroup} />;
|
2020-04-23 11:54:29 +10:00
|
|
|
}
|
|
|
|
|
|
2020-04-23 18:01:40 +10:00
|
|
|
export default MapTiles;
|