react-floorplanner
Version:
react-floorplanner is a React Component for plans design. Draw a 2D floorplan and navigate it in 3D mode.
48 lines (38 loc) • 1.81 kB
JSX
import React from 'react';
import PropTypes from 'prop-types';
import Panel from '../panel';
import {Seq} from 'immutable';
import {
MODE_IDLE, MODE_2D_ZOOM_IN, MODE_2D_ZOOM_OUT, MODE_2D_PAN, MODE_3D_VIEW, MODE_3D_FIRST_PERSON,
MODE_WAITING_DRAWING_LINE, MODE_DRAWING_LINE, MODE_DRAWING_HOLE, MODE_DRAWING_ITEM, MODE_DRAGGING_LINE,
MODE_DRAGGING_VERTEX, MODE_DRAGGING_ITEM, MODE_DRAGGING_HOLE, MODE_FITTING_IMAGE, MODE_UPLOADING_IMAGE,
MODE_ROTATING_ITEM
} from '../../../constants';
import ElementEditor from './element-editor';
export default function PanelElementEditor({state}, {projectActions, translator}) {
let {scene, mode} = state;
if (![MODE_IDLE, MODE_2D_ZOOM_IN, MODE_2D_ZOOM_OUT, MODE_2D_PAN,
MODE_3D_VIEW, MODE_3D_FIRST_PERSON,
MODE_WAITING_DRAWING_LINE, MODE_DRAWING_LINE, MODE_DRAWING_HOLE, MODE_DRAWING_ITEM,
MODE_DRAGGING_LINE, MODE_DRAGGING_VERTEX, MODE_DRAGGING_ITEM, MODE_DRAGGING_HOLE,
MODE_ROTATING_ITEM, MODE_UPLOADING_IMAGE, MODE_FITTING_IMAGE].includes(mode)) return null;
let componentRenderer = (element, layer) =>
<Panel key={element.id} name={translator.t("Properties: [{0}] {1}", element.type, element.id)}>
<div style={{padding: "5px 15px"}}>
<ElementEditor element={element} layer={layer} state={state}/>
</div>
</Panel>;
let layerRenderer = layer => Seq()
.concat(layer.lines, layer.holes, layer.areas, layer.items)
.filter(element => element.selected)
.map(element => componentRenderer(element, layer))
.valueSeq();
return <div>{scene.layers.valueSeq().map(layerRenderer)}</div>
}
PanelElementEditor.propTypes = {
state: PropTypes.object.isRequired,
};
PanelElementEditor.contextTypes = {
projectActions: PropTypes.object.isRequired,
translator: PropTypes.object.isRequired
};