import React, { useState } from "react"; import { Flex, Image as UIImage, IconButton, Box, Text } from "theme-ui"; import RemoveMapIcon from "../../icons/RemoveMapIcon"; import ResetMapIcon from "../../icons/ResetMapIcon"; import ExpandMoreDotIcon from "../../icons/ExpandMoreDotIcon"; import useDataSource from "../../helpers/useDataSource"; import { mapSources as defaultMapSources } from "../../maps"; function MapTile({ map, mapState, isSelected, onMapSelect, onMapRemove, onMapReset, onSubmit, }) { const mapSource = useDataSource(map, defaultMapSources); const [isMapTileMenuOpen, setIsTileMenuOpen] = useState(false); const isDefault = map.type === "default"; const hasMapState = mapState && (Object.values(mapState.tokens).length > 0 || mapState.mapDrawActions.length > 0 || mapState.fogDrawActions.length > 0); const expandButton = ( { e.preventDefault(); e.stopPropagation(); setIsTileMenuOpen(true); }} bg="overlay" sx={{ borderRadius: "50%" }} m={1} > ); function removeButton(map) { return ( { e.preventDefault(); e.stopPropagation(); setIsTileMenuOpen(false); onMapRemove(map.id); }} bg="overlay" sx={{ borderRadius: "50%" }} m={1} > ); } function resetButton(map) { return ( { e.preventDefault(); e.stopPropagation(); setIsTileMenuOpen(false); onMapReset(map.id); }} bg="overlay" sx={{ borderRadius: "50%" }} m={1} > ); } return ( { setIsTileMenuOpen(false); if (!isSelected) { onMapSelect(map); } }} onDoubleClick={(e) => { if (!isMapTileMenuOpen) { onSubmit(e); } }} > {map.name} {/* Show expand button only if both reset and remove is available */} {isSelected && ( {isDefault && hasMapState && resetButton(map)} {!isDefault && hasMapState && !isMapTileMenuOpen && expandButton} {!isDefault && !hasMapState && removeButton(map)} )} {/* Tile menu for two actions */} {!isDefault && isMapTileMenuOpen && isSelected && ( setIsTileMenuOpen(false)} > {!isDefault && removeButton(map)} {hasMapState && resetButton(map)} )} ); } export default MapTile;