react-planner-viewer
Version:
react-planner-viewer is a React Component for view plans builded with react-planner in 2D mode
67 lines (57 loc) • 1.73 kB
JavaScript
import {
select,
unselectAll,
showHeatMap,
} from '../utils/layer-operations';
import { SELECT_AREA, SHOW_HEAT_MAP_AREAS } from '../constants';
import { Vertex } from '../models';
export default function (state, action) {
switch (action.type) {
case SELECT_AREA:
return selectArea(state, action.layerID, action.areaID);
case SHOW_HEAT_MAP_AREAS:
return showHeatMapAreas(state, action.layerID, action.heatMapValues, action.colors);
default:
return state;
}
}
function selectArea(state, layerID, areaID) {
let scene = state.scene;
scene = scene.merge({
layers: scene.layers.map(unselectAll),
selectedLayer: layerID
});
scene = scene.updateIn(['layers', layerID], layer => layer.withMutations(layer => {
let area = layer.getIn(['areas', areaID]);
select(layer, 'areas', areaID);
const areaVertices = area.vertices;
const areaLinesIds = [];
const allLines = layer.lines.forEach(line => {
const lineVertices = line.get('vertices');
const lineBelongsToArea = lineVertices.every(vert => areaVertices.includes(vert));
if(lineBelongsToArea){
select(layer, 'lines', line.get('id'));
}
});
})
);
return state.merge({
scene,
sceneHistory: state.sceneHistory.push(scene)
})
}
function showHeatMapAreas(state, layerID, heatMapValues, colors) {
let scene = state.scene;
scene = scene.merge({
layers: scene.layers.map(unselectAll),
selectedLayer: layerID
});
scene = scene.updateIn(['layers', layerID], layer => layer.withMutations(layer => {
showHeatMap(layer, heatMapValues, colors);
})
);
return state.merge({
scene,
sceneHistory: state.sceneHistory.push(scene)
})
}