UNPKG

kitchen-simulator

Version:

It is a kitchen simulator (self-contained micro-frontend).

56 lines 2.32 kB
import { MODE_3D_FIRST_PERSON, MODE_3D_VIEW, SELECT_TOOL_3D_FIRST_PERSON, SELECT_TOOL_3D_VIEW, UPDATE_3D_CEIL_HEIGHT, UPDATE_3D_CEIL_HEIGHT_UNIT } from "../constants"; import { Project } from "../class/export"; import { history } from "../utils/export"; import { convert } from "../utils/convert-units-lite"; export default function (state, action) { state = state.merge({ sceneHistory: history.historyPush(state.sceneHistory, state.scene) }); switch (action.type) { case UPDATE_3D_CEIL_HEIGHT_UNIT: { var _state = state, scene = _state.scene; var selectedLayer = scene.selectedLayer; var layer = scene.layers.get(selectedLayer); var newLayer = layer.merge({ unit: action.value }); state = state.mergeIn(['scene', 'layers', selectedLayer], newLayer); return state; } case UPDATE_3D_CEIL_HEIGHT: { var _state2 = state, _scene = _state2.scene; var _selectedLayer = _scene.selectedLayer; var _layer = _scene.layers.get(_selectedLayer); var _newLayer = _layer.merge({ ceilHeight: action.value }); state = state.mergeIn(['scene', 'layers', _selectedLayer], _newLayer); var items = state.scene.layers.get(state.scene.selectedLayer).items; var newItems = items.map(function (item) { if (item.type.includes('Light')) { var height = item.properties.getIn(['height', '_length']); var heightUnit = item.properties.getIn(['height', '_unit']); var newAltitude = action.value - convert(height).from(heightUnit).to('in'); item = item.setIn(['properties', 'altitude', '_length'], convert(newAltitude).from('in').to(_layer.unit)); } return item; }); state = state.mergeIn(['scene', 'layers', _selectedLayer, 'items'], newItems); return state; } case SELECT_TOOL_3D_VIEW: state = Project.rollback(state).updatedState; state = Project.setMode(state, MODE_3D_VIEW).updatedState; return state; case SELECT_TOOL_3D_FIRST_PERSON: state = Project.rollback(state).updatedState; state = Project.setMode(state, MODE_3D_FIRST_PERSON).updatedState; return state; default: return state; } }