UNPKG

react-flow-diagram

Version:
409 lines (360 loc) 13.3 kB
'use strict'; exports.__esModule = true; exports.unselectAll = exports.selectEntity = exports.setCustom = exports.setName = exports.move = exports.removeEntity = exports.addLinkedEntity = exports.linkTo = exports.addEntity = exports.setEntities = exports.metaEntityReducer = exports.EntityActionTypesModify = exports.EntityActionTypeOpen = undefined; 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 _calcLinkPoints = require('../links/calcLinkPoints'); var _calcLinkPoints2 = _interopRequireDefault(_calcLinkPoints); var _positionAdjustedToGrid = require('../canvas/positionAdjustedToGrid'); var _positionAdjustedToGrid2 = _interopRequireDefault(_positionAdjustedToGrid); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var EntityActionTypeOpen = exports.EntityActionTypeOpen = 'rd/entity/SET'; var EntityActionTypesModify = exports.EntityActionTypesModify = ['rd/entity/ADD', 'rd/entity/LINK_TO', 'rd/entity/ADD_LINKED', 'rd/entity/REMOVE', 'rd/entity/MOVE', 'rd/entity/SET_NAME', 'rd/entity/SET_CUSTOM']; var entityReducer = function entityReducer() { var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : []; var action = arguments[1]; var metaEntity = arguments[2]; var canvas = arguments[3]; switch (action.type) { case 'rd/entity/SET': return action.payload; case 'rd/config/SET': { var configs = action.payload; return state.map(function (entity) { var relevantConfig = configs.entityTypes[entity.type]; return relevantConfig ? _extends({}, entity, { width: relevantConfig.width, height: relevantConfig.height }) : entity; }); } case 'rd/entity/ADD': return [].concat(state, [{ id: action.payload.id, type: action.payload.type, width: action.payload.width, height: action.payload.height, x: action.payload.x, y: action.payload.y, name: action.payload.name }]); case 'rd/entity/LINK_TO': { var payload = action.payload; return state.map(function (entity) { return entity.id === canvas.connecting.from ? _extends({}, entity, { linksTo: [].concat(entity.linksTo ? entity.linksTo : [], entity.linksTo && entity.linksTo.some(function (link) { return link.target === payload; }) ? [] : [{ target: payload, edited: false, points: (0, _calcLinkPoints2.default)(entity, state.find(function (ent) { return ent.id === payload; })) }]) }) : entity; }); } case 'rd/entity/ADD_LINKED': { var _action$payload = action.payload, _entity = _action$payload.entity, _id = _action$payload.id; return [].concat(state.map(function (existingEntity) { return existingEntity.id === _id ? _extends({}, existingEntity, { linksTo: [].concat(existingEntity.linksTo ? existingEntity.linksTo : [], [{ target: _entity.id, edited: false }]) }) : existingEntity; }), [{ id: _entity.id, type: _entity.type, width: _entity.width, height: _entity.height, x: _entity.x, y: _entity.y, name: _entity.name }]); } case 'rd/entity/REMOVE': return state.filter(function (entity) { return entity.id !== action.payload; }).map(function (entity) { return entity.linksTo ? _extends({}, entity, { linksTo: entity.linksTo.filter(function (link) { return link.target !== action.payload; }) }) : entity; }); case 'rd/canvas/TRACK': { if (canvas.anchoredEntity.isAnchored) { var _id2 = canvas.anchoredEntity.id; var mEntity = metaEntity.find(function (e) { return e.id === _id2; }) || { anchor: { x: 0, y: 0 } }; var _x2 = canvas.cursor.x - mEntity.anchor.x; var _y = canvas.cursor.y - mEntity.anchor.y; var gridX = (0, _positionAdjustedToGrid2.default)(_x2, canvas.gridSize); var gridY = (0, _positionAdjustedToGrid2.default)(_y, canvas.gridSize); return state.map(function (entity) { if (entity.linksTo && entity.id === _id2) { return _extends({}, entity, { x: gridX, y: gridY, linksTo: entity.linksTo.map(function (link) { return _extends({}, link, { points: (0, _calcLinkPoints2.default)(entity, state.find(function (ent) { return ent.id === link.target; })) }); }) }); } else if (entity.id === _id2) { return _extends({}, entity, { x: gridX, y: gridY }); } else if (entity.linksTo && entity.linksTo.some(function (link) { return link.target === _id2; })) { return _extends({}, entity, { linksTo: entity.linksTo.map(function (link) { return link.target === _id2 ? _extends({}, link, { points: (0, _calcLinkPoints2.default)(entity, state.find(function (ent) { return ent.id === _id2; })) }) : link; }) }); } else { return entity; } }); } else { return state; } } // All this logic can be potentially removed, research if I'll still use // the MOVE action... or perhaps put all this into its own function and // reuse :shrug: case 'rd/entity/MOVE': { var _action$payload2 = action.payload, _id3 = _action$payload2.id, _x3 = _action$payload2.x, _y2 = _action$payload2.y; var _gridX = (0, _positionAdjustedToGrid2.default)(_x3, canvas.gridSize); var _gridY = (0, _positionAdjustedToGrid2.default)(_y2, canvas.gridSize); return state.map(function (entity) { if (entity.linksTo && entity.id === _id3) { return _extends({}, entity, { x: _gridX, y: _gridY, linksTo: entity.linksTo.map(function (link) { return _extends({}, link, { points: (0, _calcLinkPoints2.default)(entity, state.find(function (ent) { return ent.id === link.target; })) }); }) }); } else if (entity.id === _id3) { return _extends({}, entity, { x: _gridX, y: _gridY }); } else if (entity.linksTo && entity.linksTo.some(function (link) { return link.target === _id3; })) { return _extends({}, entity, { linksTo: entity.linksTo.map(function (link) { return link.target === _id3 ? _extends({}, link, { points: (0, _calcLinkPoints2.default)(entity, state.find(function (ent) { return ent.id === _id3; })) }) : link; }) }); } else { return entity; } }); } case 'rd/entity/SET_NAME': { var _action$payload3 = action.payload, _id4 = _action$payload3.id, _name = _action$payload3.name; return state.map(function (entity) { return entity.id === _id4 ? _extends({}, entity, { name: _name }) : entity; }); } case 'rd/entity/LINK_POINTS': { var _action$payload4 = action.payload, from = _action$payload4.from, to = _action$payload4.to, _points = _action$payload4.points; return state.map(function (entity) { return entity.id === from ? _extends({}, entity, { linksTo: entity.linksTo ? entity.linksTo.map(function (link) { return link.target === to ? _extends({}, link, { points: _points }) : link; }) : [{ target: to, points: _points }] }) : entity; }); } case 'rd/entity/SET_CUSTOM': { var _action$payload5 = action.payload, _id5 = _action$payload5.id, _custom = _action$payload5.custom; return state.map(function (entity) { return entity.id === _id5 ? _extends({}, entity, { custom: _custom }) : entity; }); } default: return state; } }; var unselectMetaEntity = function unselectMetaEntity(metaEntity) { return _extends({}, metaEntity, { isSelected: false }); }; var metaEntityReducer = exports.metaEntityReducer = function metaEntityReducer() { var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : []; var action = arguments[1]; var entity = arguments[2]; var canvas = arguments[3]; switch (action.type) { case 'rd/entity/SET': return action.payload.map(function (ent) { return { id: ent.id, isAnchored: false, isSelected: false, anchor: { x: ent.width / 2, y: ent.height / 2 } }; }); case 'rd/entity/ADD': return [].concat(state, [{ id: action.payload.id, isAnchored: action.payload.isAnchored, isSelected: action.payload.isSelected, anchor: { x: action.payload.width / 2, y: action.payload.height / 2 } }]); case 'rd/entity/ADD_LINKED': return [].concat(state.map(unselectMetaEntity), [{ id: action.payload.entity.id, isAnchored: action.payload.entity.isAnchored, isSelected: action.payload.entity.isSelected, anchor: { x: action.payload.entity.width / 2, y: action.payload.entity.height / 2 } }]); case 'rd/metaentity/SELECT': { var _action$payload6 = action.payload, _id6 = _action$payload6.id, _isSelected = _action$payload6.isSelected; return state.map(function (metaEntity) { return metaEntity.id === _id6 ? _extends({}, metaEntity, { isSelected: _isSelected }) : _extends({}, metaEntity, { isSelected: false }); }); } case 'rd/canvas/ANCHOR_ENTITY': { var _id7 = action.payload.id; return state.map(function (metaEntity) { return metaEntity.id === _id7 ? _extends({}, metaEntity, { isAnchored: true, anchor: { x: canvas.cursor.x - (entity.find(function (e) { return e.id === _id7; }) || { x: 0 }).x, y: canvas.cursor.y - (entity.find(function (e) { return e.id === _id7; }) || { y: 0 }).y } }) : _extends({}, metaEntity, { isAnchored: false }); }); } case 'rd/entity/REMOVE': return state.filter(function (ent) { return ent.id !== action.payload; }); case 'rd/entity/CONNECT': case 'rd/metaentity/UNSELECTALL': case 'rd/canvas/ANCHOR_CANVAS': return state.map(unselectMetaEntity); default: return state; } }; var setEntities = exports.setEntities = function setEntities(payload) { return { type: 'rd/entity/SET', payload: payload }; }; var addEntity = exports.addEntity = function addEntity(payload) { return { type: 'rd/entity/ADD', payload: payload }; }; var linkTo = exports.linkTo = function linkTo(payload) { return { type: 'rd/entity/LINK_TO', payload: payload }; }; var addLinkedEntity = exports.addLinkedEntity = function addLinkedEntity(payload) { return { type: 'rd/entity/ADD_LINKED', payload: payload }; }; var removeEntity = exports.removeEntity = function removeEntity(payload) { return { type: 'rd/entity/REMOVE', payload: payload }; }; var move = exports.move = function move(payload) { return { type: 'rd/entity/MOVE', payload: payload }; }; var setName = exports.setName = function setName(payload) { return { type: 'rd/entity/SET_NAME', payload: payload }; }; var setCustom = exports.setCustom = function setCustom(payload) { return { type: 'rd/entity/SET_CUSTOM', payload: payload }; }; var selectEntity = exports.selectEntity = function selectEntity(id) { var isSelected = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true; return { type: 'rd/metaentity/SELECT', payload: { id: id, isSelected: isSelected } }; }; var unselectAll = exports.unselectAll = function unselectAll() { return { type: 'rd/metaentity/UNSELECTALL', payload: null }; }; exports.default = entityReducer;