import React, { useEffect, useState } from "react"; import { Flex, Box, Text, IconButton, Close, Grid } from "theme-ui"; import SimpleBar from "simplebar-react"; import RemoveMapIcon from "../../icons/RemoveMapIcon"; import ResetMapIcon from "../../icons/ResetMapIcon"; import MapTile from "./MapTile"; import MapTileGroup from "./MapTileGroup"; import Link from "../Link"; import FilterBar from "../FilterBar"; import Sortable from "../drag/Sortable"; import SortableTiles from "../drag/SortableTiles"; import useResponsiveLayout from "../../hooks/useResponsiveLayout"; import { groupsFromIds, itemsFromGroups } from "../../helpers/select"; function MapTiles({ maps, mapStates, groups, selectedGroupIds, onTileSelect, onMapsRemove, onMapsReset, onMapAdd, onMapEdit, onDone, selectMode, onSelectModeChange, search, onSearchChange, onMapsGroup, databaseDisabled, }) { const layout = useResponsiveLayout(); const [hasMapState, setHasMapState] = useState(false); const [hasSelectedDefaultMap, setHasSelectedDefaultMap] = useState(false); useEffect(() => { const selectedGroups = groupsFromIds(selectedGroupIds, groups); const selectedMaps = itemsFromGroups(selectedGroups, maps); const selectedMapStates = itemsFromGroups( selectedGroups, mapStates, "mapId" ); setHasSelectedDefaultMap( selectedMaps.some((map) => map.type === "default") ); let _hasMapState = false; for (let state of selectedMapStates) { if ( Object.values(state.tokens).length > 0 || Object.values(state.drawShapes).length > 0 || Object.values(state.fogShapes).length > 0 || Object.values(state.notes).length > 0 ) { _hasMapState = true; break; } } setHasMapState(_hasMapState); }, [selectedGroupIds, maps, mapStates, groups]); function groupToMapTile(group) { if (group.type === "item") { const map = maps.find((map) => map.id === group.id); const isSelected = selectedGroupIds.includes(group.id); return ( ); } else { const isSelected = selectedGroupIds.includes(group.id); return ( maps.find((map) => map.id === item.id) )} isSelected={isSelected} onSelect={onTileSelect} /> ); } } const multipleSelected = selectedGroupIds.length > 1; return ( onTileSelect()} search={search} onSearchChange={onSearchChange} selectMode={selectMode} onSelectModeChange={onSelectModeChange} onAdd={onMapAdd} addTitle="Add Map" /> onTileSelect()} > {groups.map((group) => ( {groupToMapTile(group)} ))} {databaseDisabled && ( Map saving is unavailable. See FAQ{" "} for more information. )} {selectedGroupIds.length > 0 && ( onTileSelect()} /> onMapsReset()} disabled={!hasMapState} > onMapsRemove()} disabled={hasSelectedDefaultMap} > )} ); } export default MapTiles;