import update from 'react-addons-update'; import circleReducer from './tools/shapes/circleReducer.js'; import circleSegmentReducer from './tools/shapes/circleSegmentReducer.js'; import rectReducer from './tools/shapes/rectReducer.js'; import polyPointReducer from './tools/shapes/polyPointReducer.js'; import heartReducer from './tools/shapes/heartReducer.js'; import starReducer from './tools/shapes/starReducer.js'; import triangleReducer from './tools/shapes/triangleReducer.js'; import bucketReducer from './tools/bucketReducer.js'; import penReducer from './tools/penReducer.js'; import textReducer from './tools/textReducer.js'; import photoGuideReducer from './tools/photoGuideReducer.js'; import { transformReducer } from './tools/transformReducer.js'; import eraserReducer from './tools/eraserReducer.js'; import * as actions from '../../actions/index.js'; import * as tools from '../../constants/d2Tools.js'; import createDebug from 'debug'; const debug = createDebug('d3d:reducer:d2:tool'); const reducers = { [tools.CIRCLE]: circleReducer, [tools.CIRCLE_SEGMENT]: circleSegmentReducer, [tools.FREE_HAND]: penReducer, [tools.RECT]: rectReducer, [tools.STAR]: starReducer, [tools.TRIANGLE]: triangleReducer, [tools.POLY_POINT]: polyPointReducer, [tools.HEART]: heartReducer, [tools.TRANSFORM]: transformReducer, [tools.ERASER]: eraserReducer, [tools.POLYGON]: penReducer, [tools.PHOTO_GUIDE]: photoGuideReducer, [tools.BUCKET]: bucketReducer, [tools.TEXT]: textReducer, [tools.BRUSH]: penReducer }; export default function toolReducer(state, action) { // if (action.log !== false) debug(action.type); // change 2D tool after explicit tool change action or on some selection if (action.type === actions.D2_CHANGE_TOOL) { state = updateTool(state, action.tool); } if (action.category === actions.CAT_SELECTION) { state = updateTool(state, tools.TRANSFORM); } const tool = state.d2.tool; const reducer = reducers[tool]; if (reducer) { return reducer(state, action); } else { if (action.log !== false) debug('Unkown 2D tool: ', tool); return state; } } function updateTool(state, newTool) { if (newTool === state.d2.tool) { return state; } else { debug('d2 tool: ', newTool); return update(state, { d2: { tool: { $set: newTool } } }); } }