react-planner
Version:
react-planner is a React Component for plans design. Draw a 2D floorplan and navigate it in 3D mode.
448 lines (358 loc) • 15.3 kB
JavaScript
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.State = exports.HistoryStructure = exports.Catalog = exports.CatalogElement = exports.Scene = exports.DefaultLayers = exports.Group = exports.Layer = exports.Item = exports.Area = exports.Hole = exports.Line = exports.Vertex = exports.ElementsSet = exports.DefaultGrids = exports.Grid = undefined;
var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };
var _immutable = require('immutable');
var _constants = require('./constants');
var _snap = require('./utils/snap');
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
var safeLoadMapList = function safeLoadMapList(mapList, Model, defaultMap) {
return mapList ? new _immutable.Map(mapList).map(function (m) {
return new Model(m);
}).toMap() : defaultMap || new _immutable.Map();
};
var Grid = exports.Grid = function (_Record) {
_inherits(Grid, _Record);
function Grid() {
var json = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
_classCallCheck(this, Grid);
return _possibleConstructorReturn(this, (Grid.__proto__ || Object.getPrototypeOf(Grid)).call(this, _extends({}, json, {
properties: (0, _immutable.fromJS)(json.properties || {})
})));
}
return Grid;
}((0, _immutable.Record)({
id: '',
type: '',
properties: (0, _immutable.Map)()
}, 'Grid'));
var DefaultGrids = exports.DefaultGrids = new _immutable.Map({
'h1': new Grid({
id: 'h1',
type: 'horizontal-streak',
properties: {
step: 20,
colors: ['#808080', '#ddd', '#ddd', '#ddd', '#ddd']
}
}),
'v1': new Grid({
id: 'v1',
type: 'vertical-streak',
properties: {
step: 20,
colors: ['#808080', '#ddd', '#ddd', '#ddd', '#ddd']
}
})
});
var ElementsSet = exports.ElementsSet = function (_Record2) {
_inherits(ElementsSet, _Record2);
function ElementsSet() {
var json = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
_classCallCheck(this, ElementsSet);
return _possibleConstructorReturn(this, (ElementsSet.__proto__ || Object.getPrototypeOf(ElementsSet)).call(this, {
vertices: new _immutable.List(json.vertices || []),
lines: new _immutable.List(json.lines || []),
holes: new _immutable.List(json.holes || []),
areas: new _immutable.List(json.areas || []),
items: new _immutable.List(json.items || [])
}));
}
return ElementsSet;
}((0, _immutable.Record)({
vertices: new _immutable.List(),
lines: new _immutable.List(),
holes: new _immutable.List(),
areas: new _immutable.List(),
items: new _immutable.List()
}, 'ElementsSet'));
var sharedAttributes = {
id: '',
type: '',
prototype: '',
name: '',
misc: new _immutable.Map(),
selected: false,
properties: new _immutable.Map(),
visible: true
};
var Vertex = exports.Vertex = function (_Record3) {
_inherits(Vertex, _Record3);
function Vertex() {
var json = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
_classCallCheck(this, Vertex);
return _possibleConstructorReturn(this, (Vertex.__proto__ || Object.getPrototypeOf(Vertex)).call(this, _extends({}, json, {
lines: new _immutable.List(json.lines || []),
areas: new _immutable.List(json.areas || [])
})));
}
return Vertex;
}((0, _immutable.Record)(_extends({}, sharedAttributes, {
x: -1,
y: -1,
prototype: 'vertices',
lines: new _immutable.List(),
areas: new _immutable.List()
}), 'Vertex'));
var Line = exports.Line = function (_Record4) {
_inherits(Line, _Record4);
function Line() {
var json = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
_classCallCheck(this, Line);
return _possibleConstructorReturn(this, (Line.__proto__ || Object.getPrototypeOf(Line)).call(this, _extends({}, json, {
properties: (0, _immutable.fromJS)(json.properties || {}),
vertices: new _immutable.List(json.vertices || []),
holes: new _immutable.List(json.holes || [])
})));
}
return Line;
}((0, _immutable.Record)(_extends({}, sharedAttributes, {
prototype: 'lines',
vertices: new _immutable.List(),
holes: new _immutable.List()
}), 'Line'));
var Hole = exports.Hole = function (_Record5) {
_inherits(Hole, _Record5);
function Hole() {
var json = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
_classCallCheck(this, Hole);
return _possibleConstructorReturn(this, (Hole.__proto__ || Object.getPrototypeOf(Hole)).call(this, _extends({}, json, {
properties: (0, _immutable.fromJS)(json.properties || {})
})));
}
return Hole;
}((0, _immutable.Record)(_extends({}, sharedAttributes, {
prototype: 'holes',
offset: -1,
line: ''
}), 'Hole'));
var Area = exports.Area = function (_Record6) {
_inherits(Area, _Record6);
function Area() {
var json = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
_classCallCheck(this, Area);
return _possibleConstructorReturn(this, (Area.__proto__ || Object.getPrototypeOf(Area)).call(this, _extends({}, json, {
properties: (0, _immutable.fromJS)(json.properties || {}),
vertices: new _immutable.List(json.vertices || [])
})));
}
return Area;
}((0, _immutable.Record)(_extends({}, sharedAttributes, {
prototype: 'areas',
vertices: new _immutable.List(),
holes: new _immutable.List()
}), 'Area'));
var Item = exports.Item = function (_Record7) {
_inherits(Item, _Record7);
function Item() {
var json = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
_classCallCheck(this, Item);
return _possibleConstructorReturn(this, (Item.__proto__ || Object.getPrototypeOf(Item)).call(this, _extends({}, json, {
properties: (0, _immutable.fromJS)(json.properties || {})
})));
}
return Item;
}((0, _immutable.Record)(_extends({}, sharedAttributes, {
prototype: 'items',
x: 0,
y: 0,
rotation: 0
}), 'Item'));
var Layer = exports.Layer = function (_Record8) {
_inherits(Layer, _Record8);
function Layer() {
var json = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
_classCallCheck(this, Layer);
return _possibleConstructorReturn(this, (Layer.__proto__ || Object.getPrototypeOf(Layer)).call(this, _extends({}, json, {
vertices: safeLoadMapList(json.vertices, Vertex),
lines: safeLoadMapList(json.lines, Line),
holes: safeLoadMapList(json.holes, Hole),
areas: safeLoadMapList(json.areas, Area),
items: safeLoadMapList(json.items, Item),
selected: new ElementsSet(json.selected)
})));
}
return Layer;
}((0, _immutable.Record)({
id: '',
altitude: 0,
order: 0,
opacity: 1,
name: '',
visible: true,
vertices: new _immutable.Map(),
lines: new _immutable.Map(),
holes: new _immutable.Map(),
areas: new _immutable.Map(),
items: new _immutable.Map(),
selected: new ElementsSet()
}, 'Layer'));
var Group = exports.Group = function (_Record9) {
_inherits(Group, _Record9);
function Group() {
var json = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
_classCallCheck(this, Group);
return _possibleConstructorReturn(this, (Group.__proto__ || Object.getPrototypeOf(Group)).call(this, _extends({}, json, {
properties: (0, _immutable.fromJS)(json.properties || {}),
elements: (0, _immutable.fromJS)(json.elements || {})
})));
}
return Group;
}((0, _immutable.Record)(_extends({}, sharedAttributes, {
prototype: 'groups',
x: 0,
y: 0,
rotation: 0,
elements: new _immutable.Map()
}), 'Group'));
var DefaultLayers = exports.DefaultLayers = new _immutable.Map({
'layer-1': new Layer({ id: 'layer-1', name: 'default' })
});
var Scene = exports.Scene = function (_Record10) {
_inherits(Scene, _Record10);
function Scene() {
var json = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
_classCallCheck(this, Scene);
var layers = safeLoadMapList(json.layers, Layer, DefaultLayers);
return _possibleConstructorReturn(this, (Scene.__proto__ || Object.getPrototypeOf(Scene)).call(this, _extends({}, json, {
grids: safeLoadMapList(json.grids, Grid, DefaultGrids),
layers: layers,
selectedLayer: layers.first().id,
groups: safeLoadMapList(json.groups || {}, Group),
meta: json.meta ? (0, _immutable.fromJS)(json.meta) : new _immutable.Map(),
guides: json.guides ? (0, _immutable.fromJS)(json.guides) : new _immutable.Map({ horizontal: new _immutable.Map(), vertical: new _immutable.Map(), circular: new _immutable.Map() })
})));
}
return Scene;
}((0, _immutable.Record)({
unit: 'cm',
layers: new _immutable.Map(),
grids: new _immutable.Map(),
selectedLayer: null,
groups: new _immutable.Map(),
width: 3000,
height: 2000,
meta: new _immutable.Map(), //additional info
guides: new _immutable.Map()
}, 'Scene'));
var CatalogElement = exports.CatalogElement = function (_Record11) {
_inherits(CatalogElement, _Record11);
function CatalogElement() {
var json = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
_classCallCheck(this, CatalogElement);
return _possibleConstructorReturn(this, (CatalogElement.__proto__ || Object.getPrototypeOf(CatalogElement)).call(this, _extends({}, json, {
info: (0, _immutable.fromJS)(json.info),
properties: (0, _immutable.fromJS)(json.properties)
})));
}
return CatalogElement;
}((0, _immutable.Record)({
name: '',
prototype: '',
info: new _immutable.Map(),
properties: new _immutable.Map()
}, 'CatalogElement'));
var Catalog = exports.Catalog = function (_Record12) {
_inherits(Catalog, _Record12);
function Catalog() {
var json = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
_classCallCheck(this, Catalog);
var elements = safeLoadMapList(json.elements, CatalogElement);
return _possibleConstructorReturn(this, (Catalog.__proto__ || Object.getPrototypeOf(Catalog)).call(this, {
elements: elements,
ready: !elements.isEmpty()
}));
}
_createClass(Catalog, [{
key: 'factoryElement',
value: function factoryElement(type, options, initialProperties) {
if (!this.elements.has(type)) {
var catList = this.elements.map(function (element) {
return element.name;
}).toArray();
throw new Error('Element ' + type + ' does not exist in catalog ' + catList);
}
var element = this.elements.get(type);
var properties = element.properties.map(function (value, key) {
return initialProperties && initialProperties.has(key) ? initialProperties.get(key) : value.get('defaultValue');
});
switch (element.prototype) {
case 'lines':
return new Line(options).merge({ properties: properties });
case 'holes':
return new Hole(options).merge({ properties: properties });
case 'areas':
return new Area(options).merge({ properties: properties });
case 'items':
return new Item(options).merge({ properties: properties });
default:
throw new Error('prototype not valid');
}
}
}]);
return Catalog;
}((0, _immutable.Record)({
ready: false,
page: 'root',
path: new _immutable.List(),
elements: new _immutable.Map()
}, 'Catalog'));
var HistoryStructure = exports.HistoryStructure = function (_Record13) {
_inherits(HistoryStructure, _Record13);
function HistoryStructure() {
var json = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
_classCallCheck(this, HistoryStructure);
return _possibleConstructorReturn(this, (HistoryStructure.__proto__ || Object.getPrototypeOf(HistoryStructure)).call(this, {
list: (0, _immutable.fromJS)(json.list || []),
first: new Scene(json.scene),
last: new Scene(json.last || json.scene)
}));
}
return HistoryStructure;
}((0, _immutable.Record)({
list: new _immutable.List(),
first: null,
last: null
}, 'HistoryStructure'));
var State = exports.State = function (_Record14) {
_inherits(State, _Record14);
function State() {
var json = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
_classCallCheck(this, State);
return _possibleConstructorReturn(this, (State.__proto__ || Object.getPrototypeOf(State)).call(this, _extends({}, json, {
scene: new Scene(json.scene),
sceneHistory: new HistoryStructure(json),
catalog: new Catalog(json.catalog || {}),
viewer2D: new _immutable.Map(json.viewer2D || {}),
drawingSupport: new _immutable.Map(json.drawingSupport || {}),
draggingSupport: new _immutable.Map(json.draggingSupport || {}),
rotatingSupport: new _immutable.Map(json.rotatingSupport || {}),
misc: json.misc ? (0, _immutable.fromJS)(json.misc) : new _immutable.Map()
})));
}
return State;
}((0, _immutable.Record)({
mode: _constants.MODE_IDLE,
scene: new Scene(),
sceneHistory: new HistoryStructure(),
catalog: new Catalog(),
viewer2D: new _immutable.Map(),
mouse: new _immutable.Map({ x: 0, y: 0 }),
zoom: 0,
snapMask: _snap.SNAP_MASK,
snapElements: new _immutable.List(),
activeSnapElement: null,
drawingSupport: new _immutable.Map(),
draggingSupport: new _immutable.Map(),
rotatingSupport: new _immutable.Map(),
errors: new _immutable.List(),
warnings: new _immutable.List(),
clipboardProperties: new _immutable.Map(),
selectedElementsHistory: new _immutable.List(),
misc: new _immutable.Map(), //additional info
alterate: false
}, 'State'));