text: import { uuid } from 'uuidv4'
  import { addRoom, deleteRoom } from './room'
  
  export const START_NEW_ROOM_CONSTRUCTION = 'START_NEW_ROOM_CONSTRUCTION'
  export const START_NEW_ROOM_CONSTRUCTION_SUCCEEDED = 'START_NEW_ROOM_CONSTRUCTION_SUCCEEDED'
  export const FINISH_NEW_ROOM_CONSTRUCTION = 'FINISH_NEW_ROOM_CONSTRUCTION'
  export const CANCEL_NEW_ROOM_CONSTRUCTION = 'CANCEL_NEW_ROOM_CONSTRUCTION'
  export const CANCEL_NEW_ROOM_CONSTRUCTION_SUCCEEDED = 'CANCEL_NEW_ROOM_CONSTRUCTION_SUCCEEDED'
  export const START_ROOM_EDIT = 'START_ROOM_EDIT'
  export const FINISH_ROOM_EDIT = 'FINISH_ROOM_EDIT'
  export const ADD_TILE = 'ADD_TILE'
  export const DELETE_TILE = 'DELETE_TILE'
  
  export function startNewRoomConstruction() {
      return (dispatch, getState) => {
          const { topology } = getState()
          const topologyId = topology.root._id
          const room = {
              _id: uuid(),
              name: 'Room',
              topologyId,
              tiles: [],
          }
  
          dispatch(addRoom(topologyId, room))
          dispatch(startNewRoomConstructionSucceeded(room._id))
      }
  }
  
  export function startNewRoomConstructionSucceeded(roomId) {
      return {
          type: START_NEW_ROOM_CONSTRUCTION_SUCCEEDED,
          roomId,
      }
  }
  
  export function finishNewRoomConstruction() {
      return (dispatch, getState) => {
          const { topology, construction } = getState()
          if (topology.rooms[construction.currentRoomInConstruction].tiles.length === 0) {
              dispatch(cancelNewRoomConstruction())
              return
          }
  
          dispatch({
              type: FINISH_NEW_ROOM_CONSTRUCTION,
          })
      }
  }
  
  export function cancelNewRoomConstruction() {
      return (dispatch, getState) => {
          const { construction } = getState()
          const roomId = construction.currentRoomInConstruction
          dispatch(deleteRoom(roomId))
          dispatch(cancelNewRoomConstructionSucceeded())
      }
  }
  
  export function cancelNewRoomConstructionSucceeded() {
      return {
          type: CANCEL_NEW_ROOM_CONSTRUCTION_SUCCEEDED,
      }
  }
  
  export function startRoomEdit(roomId) {
      return {
          type: START_ROOM_EDIT,
          roomId: roomId,
      }
  }
  
  export function finishRoomEdit() {
      return {
          type: FINISH_ROOM_EDIT,
      }
  }
  
  export function toggleTileAtLocation(positionX, positionY) {
      return (dispatch, getState) => {
          const { topology, construction } = getState()
  
          const roomId = construction.currentRoomInConstruction
          const tileIds = topology.rooms[roomId].tiles
          for (const tileId of tileIds) {
              if (topology.tiles[tileId].positionX === positionX && topology.tiles[tileId].positionY === positionY) {
                  dispatch(deleteTile(tileId))
                  return
              }
          }
  
          dispatch(addTile(roomId, positionX, positionY))
      }
  }
  
  export function addTile(roomId, positionX, positionY) {
      return {
          type: ADD_TILE,
          tile: {
              _id: uuid(),
              roomId,
              positionX,
              positionY,
          },
      }
  }
  
  export function deleteTile(tileId) {
      return {
          type: DELETE_TILE,
          tileId,
      }
  }
  