import { connect } from "react-redux"; import { toggleTileAtLocation } from "../../../../actions/topology/building"; import RoomHoverLayerComponent from "../../../../components/app/map/layers/RoomHoverLayerComponent"; import { deriveValidNextTilePositions, findPositionInPositions, findPositionInRooms } from "../../../../util/tile-calculations"; const mapStateToProps = state => { return { mapPosition: state.map.position, mapScale: state.map.scale, isEnabled: () => state.construction.currentRoomInConstruction !== -1, isValid: (x, y) => { if (state.interactionLevel.mode !== "BUILDING") { return false; } const newRoom = Object.assign( {}, state.objects.room[state.construction.currentRoomInConstruction] ); const oldRooms = Object.keys(state.objects.room) .map(id => Object.assign({}, state.objects.room[id])) .filter( room => state.objects.datacenter[state.currentDatacenterId].roomIds.indexOf( room.id ) !== -1 && room.id !== state.construction.currentRoomInConstruction ); [...oldRooms, newRoom].forEach(room => { room.tiles = room.tileIds.map(tileId => state.objects.tile[tileId]); }); if (newRoom.tileIds.length === 0) { return findPositionInRooms(oldRooms, x, y) === -1; } const validNextPositions = deriveValidNextTilePositions( oldRooms, newRoom.tiles ); return findPositionInPositions(validNextPositions, x, y) !== -1; } }; }; const mapDispatchToProps = dispatch => { return { onClick: (x, y) => dispatch(toggleTileAtLocation(x, y)) }; }; const RoomHoverLayer = connect(mapStateToProps, mapDispatchToProps)( RoomHoverLayerComponent ); export default RoomHoverLayer;